package main
import (
	"fmt"
)
//面向对象编程——继承
type Book struct{  //相当于父类，但是Golang中没有父类子类的说法
	Name string      //共有属性字段
	Price float64
}
func (b *Book)SetName(name string){   //共有方法
	b.Name = name
}
func (b *Book)SetPrice(price float64){   //共有方法
	b.Price = price
}

type MathBook struct{
	Book   //匿名类，通过匿名类实现继承
	Mathintroduce string  //特殊的，专属的属性字段，不是共有的写在自己的结构体内
}
type ScienceBook struct{
	Book
	Scienceintroduce string
}

func main(){
	//获取实例
	mathBook := &MathBook{}
	mathBook.Book.Name = "数学"
	mathBook.Book.Price = 53.6
	mathBook.Mathintroduce = "小学生数学竞赛专用书"
	fmt.Println("Book : ",*mathBook)

	sciencebook := &ScienceBook{}
	sciencebook.Name = "世界科学！"   //匿名结构体的访问字段可以简化  继承属性
	sciencebook.Price = 511.6	//匿名结构体的访问字段可以简化 
	sciencebook.Scienceintroduce = "小学生见识科学世界书籍"
	fmt.Println("Book : ",*sciencebook)

	sciencebook.Book.SetPrice(120.5)   //继承方法
	fmt.Println("Book : ",*sciencebook)
	sciencebook.SetName("百科全书")  	//匿名结构体的访问字段可以简化
	fmt.Println("Book : ",*sciencebook)
	
}